//============================================================================================
/**
 * @file	factory_ui.h
 * @brief	バトルファクトリー インターフェース関連
 * @author	Hiroyuki Nakamura
 * @date	08.11.26
 */
//============================================================================================
#include "common.h"

#include "gflib/touchpanel.h"

#include "factory_sys.h"
#include "factory_ui.h"


//============================================================================================
//	定数定義
//============================================================================================
// factory.datの定義と同じ
#define BALL_START_X			(24)			//ボールの一番左の開始位置
#define BALL_START_Y			(64)			//ボールのY
#define BALL_POS_X				(32+8)			//ボールの間隔
#define T_BALL_START_X			(64)			//交換ボールの一番左の開始位置
#define T_BALL_START_Y			(64)			//ボールのY
#define T_BALL_POS_X			(48+8)			//交換ボールの間隔
#define T_MULTI_BALL_TEBANASU_X	(96)			//通信マルチ交換ボールの一番左の開始位置(てばなす)
#define T_MULTI_BALL_UKETORU_X	(40)			//通信マルチ交換ボールの一番左の開始位置(うけとる)

#define	BALL_HALF_SIZE		( 20 )
#define	BALL_NORMAL_UPY		( BALL_START_Y - BALL_HALF_SIZE )
#define	BALL_NORMAL_DPY		( BALL_START_Y + BALL_HALF_SIZE - 1 )
#define	BALL_NORMAL_LPX(a)	( BALL_START_X + BALL_POS_X * a - BALL_HALF_SIZE )
#define	BALL_NORMAL_RPX(a)	( BALL_START_X + BALL_POS_X * a + BALL_HALF_SIZE - 1 )

#define	BALL_NORMAL_PX(a)	( BALL_START_X + BALL_POS_X * a )

#define	BALL_TRADE_UPY		( T_BALL_START_Y - BALL_HALF_SIZE )
#define	BALL_TRADE_DPY		( T_BALL_START_Y + BALL_HALF_SIZE - 1 )
#define	BALL_TRADE_LPX(a)	( T_BALL_START_X + T_BALL_POS_X * a - BALL_HALF_SIZE )
#define	BALL_TRADE_RPX(a)	( T_BALL_START_X + T_BALL_POS_X * a + BALL_HALF_SIZE - 1 )

#define	BALL_TRADE_PX(a)	( T_BALL_START_X + T_BALL_POS_X * a )

#define	BALL_MULTI_SUB_UPY		( BALL_TRADE_UPY )
#define	BALL_MULTI_SUB_DPY		( BALL_TRADE_DPY )
#define	BALL_MULTI_SUB_LPX(a)	( T_MULTI_BALL_TEBANASU_X + T_BALL_POS_X * a - BALL_HALF_SIZE )
#define	BALL_MULTI_SUB_RPX(a)	( T_MULTI_BALL_TEBANASU_X + T_BALL_POS_X * a + BALL_HALF_SIZE - 1 )

#define	BALL_MULTI_SUB_PX(a)	( T_MULTI_BALL_TEBANASU_X + T_BALL_POS_X * a )

#define	BALL_MULTI_ADD_UPY		( BALL_TRADE_UPY )
#define	BALL_MULTI_ADD_DPY		( BALL_TRADE_DPY )
#define	BALL_MULTI_ADD_LPX(a)	( T_MULTI_BALL_UKETORU_X + T_BALL_POS_X * a - BALL_HALF_SIZE )
#define	BALL_MULTI_ADD_RPX(a)	( T_MULTI_BALL_UKETORU_X + T_BALL_POS_X * a + BALL_HALF_SIZE - 1 )

#define	BALL_MULTI_ADD_PX(a)	( T_MULTI_BALL_UKETORU_X + T_BALL_POS_X * a )


//============================================================================================
//	プロトタイプ宣言
//============================================================================================
static void DummyCallBack( void * work, int now_pos, int old_pos );

static void NormalMoveCallBack( void * work, int now_pos, int old_pos );
static void TradeMoveCallBack( void * work, int now_pos, int old_pos );
static void TradeGetMoveCallBack( void * work, int now_pos, int old_pos );


//============================================================================================
//	グローバル変数
//============================================================================================

// タッチ座標テーブル：ポケモン選択（通常）
static const RECT_HIT_TBL NormalPokeSelHitTbl[] =
{
	{ BALL_NORMAL_UPY, BALL_NORMAL_DPY, BALL_NORMAL_LPX(0), BALL_NORMAL_RPX(0) },	// 00: ポケモン１
	{ BALL_NORMAL_UPY, BALL_NORMAL_DPY, BALL_NORMAL_LPX(1), BALL_NORMAL_RPX(1) },	// 01: ポケモン２
	{ BALL_NORMAL_UPY, BALL_NORMAL_DPY, BALL_NORMAL_LPX(2), BALL_NORMAL_RPX(2) },	// 02: ポケモン３
	{ BALL_NORMAL_UPY, BALL_NORMAL_DPY, BALL_NORMAL_LPX(3), BALL_NORMAL_RPX(3) },	// 03: ポケモン４
	{ BALL_NORMAL_UPY, BALL_NORMAL_DPY, BALL_NORMAL_LPX(4), BALL_NORMAL_RPX(4) },	// 04: ポケモン５
	{ BALL_NORMAL_UPY, BALL_NORMAL_DPY, BALL_NORMAL_LPX(5), BALL_NORMAL_RPX(5) },	// 05: ポケモン６

	{  96-4, 111+4,  16-4, 111+4 },		// 06: メニュー１
	{  96-4, 111+4, 144-4, 239+4 },		// 07: メニュー２
	{ 120-4, 135+4,  80-4, 175+4 },		// 08: メニュー３

	{ RECT_HIT_END, 0, 0, 0 }
};
// 移動テーブル：ポケモン選択（通常）
static const POINTER_WORK NormalPokeSelMoveTbl[] =
{
	{ BALL_NORMAL_PX(0), BALL_START_Y, 0, 0,	0, 0, 5, 1 },		// 00: ポケモン１
	{ BALL_NORMAL_PX(1), BALL_START_Y, 0, 0,	1, 1, 0, 2 },		// 01: ポケモン２
	{ BALL_NORMAL_PX(2), BALL_START_Y, 0, 0,	2, 2, 1, 3 },		// 02: ポケモン３
	{ BALL_NORMAL_PX(3), BALL_START_Y, 0, 0,	3, 3, 2, 4 },		// 03: ポケモン４
	{ BALL_NORMAL_PX(4), BALL_START_Y, 0, 0,	4, 4, 3, 5 },		// 04: ポケモン５
	{ BALL_NORMAL_PX(5), BALL_START_Y, 0, 0,	5, 5, 4, 0 },		// 05: ポケモン６

	{  64, 104, 0, 0,	6, 8, 6, 7 },		// 06: メニュー１
	{ 192, 104, 0, 0,	7, 8, 6, 7 },		// 07: メニュー２
	{ 128, 128, 0, 0,	CURSORMOVE_RETBIT|6, 8, 8, 8 },		// 08: メニュー３
};
// コールバック：ポケモン選択（通常）
static const CURSORMOVE_CALLBACK NormalPokeSelCallBack = {
	DummyCallBack,
	DummyCallBack,
	NormalMoveCallBack,
	NormalMoveCallBack,
};


// タッチ座標テーブル：ポケモン選択（返却）
static const RECT_HIT_TBL TradePokeSelHitTbl[] =
{
	{ BALL_TRADE_UPY, BALL_TRADE_DPY, BALL_TRADE_LPX(0), BALL_TRADE_RPX(0) },	// 00: ポケモン１
	{ BALL_TRADE_UPY, BALL_TRADE_DPY, BALL_TRADE_LPX(1), BALL_TRADE_RPX(1) },	// 01: ポケモン２
	{ BALL_TRADE_UPY, BALL_TRADE_DPY, BALL_TRADE_LPX(2), BALL_TRADE_RPX(2) },	// 02: ポケモン３

	{ 120-4, 135+4, 184-4, 239+4 },		// 03: ちゅうし

	{  96-4, 111+4,  16-4, 111+4 },		// 04: メニュー１
	{  96-4, 111+4, 144-4, 239+4 },		// 05: メニュー２
	{ 120-4, 135+4,  80-4, 175+4 },		// 06: メニュー３

	{ RECT_HIT_END, 0, 0, 0 }
};
// 移動テーブル：ポケモン選択（返却）
static const POINTER_WORK TradePokeSelMoveTbl[] =
{
	{ BALL_TRADE_PX(0), T_BALL_START_Y, 0, 0,	3, 3, 3, 1 },		// 00: ポケモン１
	{ BALL_TRADE_PX(1), T_BALL_START_Y, 0, 0,	3, 3, 0, 2 },		// 01: ポケモン２
	{ BALL_TRADE_PX(2), T_BALL_START_Y, 0, 0,	3, 3, 1, 3 },		// 02: ポケモン３

	{ 212, 128, 0, 0,	CURSORMOVE_RETBIT|0, CURSORMOVE_RETBIT|0, 2, 0 },		// 03: ちゅうし

	{  64, 104, 0, 0,	4, 6, 4, 5 },						// 04: メニュー１
	{ 192, 104, 0, 0,	5, 6, 4, 5 },						// 05: メニュー２
	{ 128, 128, 0, 0,	CURSORMOVE_RETBIT|4, 6, 6, 6 },		// 06: メニュー３
};
// コールバック：ポケモン選択（返却）
static const CURSORMOVE_CALLBACK TradePokeSelCallBack = {
	DummyCallBack,
	DummyCallBack,
	TradeMoveCallBack,
	TradeMoveCallBack,
};
// タッチ座標テーブル：ポケモン選択（返却・通信）
static const RECT_HIT_TBL TradePokeSelMultiHitTbl[] =
{
	{ BALL_MULTI_SUB_UPY, BALL_MULTI_SUB_DPY, BALL_MULTI_SUB_LPX(0), BALL_MULTI_SUB_RPX(0) },	// 00: ポケモン１
	{ BALL_MULTI_SUB_UPY, BALL_MULTI_SUB_DPY, BALL_MULTI_SUB_LPX(1), BALL_MULTI_SUB_RPX(1) },	// 01: ポケモン２
	{ 0, 0, 0, 0 },		// 02: ダミー

	{ 120-4, 135+4, 184-4, 239+4 },		// 03: ちゅうし

	{  96-4, 111+4,  16-4, 111+4 },		// 04: メニュー１
	{  96-4, 111+4, 144-4, 239+4 },		// 05: メニュー２
	{ 120-4, 135+4,  80-4, 175+4 },		// 06: メニュー３

	{ RECT_HIT_END, 0, 0, 0 }
};
// 移動テーブル：ポケモン選択（返却・通信）
static const POINTER_WORK TradePokeSelMultiMoveTbl[] =
{
	{ BALL_MULTI_SUB_PX(0), T_BALL_START_Y, 0, 0,	3, 3, 3, 1 },		// 00: ポケモン１
	{ BALL_MULTI_SUB_PX(1), T_BALL_START_Y, 0, 0,	3, 3, 0, 3 },		// 01: ポケモン２
	{ 0, 0, 0, 0,	2, 2, 2, 2 },		// 02: ダミー

	{ 212, 128, 0, 0,	CURSORMOVE_RETBIT|0, CURSORMOVE_RETBIT|0, 1, 0 },		// 03: ちゅうし

	{  64, 104, 0, 0,	4, 6, 4, 5 },						// 04: メニュー１
	{ 192, 104, 0, 0,	5, 6, 4, 5 },						// 05: メニュー２
	{ 128, 128, 0, 0,	CURSORMOVE_RETBIT|4, 6, 6, 6 },		// 06: メニュー３
};


// タッチ座標テーブル：ポケモン選択（交換）
static const RECT_HIT_TBL TradeGetPokeSelHitTbl[] =
{
	{ BALL_TRADE_UPY, BALL_TRADE_DPY, BALL_TRADE_LPX(0), BALL_TRADE_RPX(0) },	// 00: ポケモン１
	{ BALL_TRADE_UPY, BALL_TRADE_DPY, BALL_TRADE_LPX(1), BALL_TRADE_RPX(1) },	// 01: ポケモン２
	{ BALL_TRADE_UPY, BALL_TRADE_DPY, BALL_TRADE_LPX(2), BALL_TRADE_RPX(2) },	// 02: ポケモン３
	{ 0, 0, 0, 0 },		// 03: ポケモン４

	{ 120-4, 135+4,  16-4,  71+4 },		// 04: もどる
	{ 120-4, 135+4, 184-4, 239+4 },		// 05: ちゅうし

	{ 120-4, 135+4,  16-4, 111+4 },		// 06: メニュー１
	{ 120-4, 135+5, 144-4, 239+4 },		// 07: メニュー２

	{ RECT_HIT_END, 0, 0, 0 }
};
// 移動テーブル：ポケモン選択（交換）
static const POINTER_WORK TradeGetPokeSelMoveTbl[] =
{
	{ BALL_TRADE_PX(0), T_BALL_START_Y, 0, 0,	4, 4, 5, 1 },		// 00: ポケモン１
	{ BALL_TRADE_PX(1), T_BALL_START_Y, 0, 0,	4, 4, 0, 2 },		// 01: ポケモン２
	{ BALL_TRADE_PX(2), T_BALL_START_Y, 0, 0,	4, 4, 1, 4 },		// 02: ポケモン３
	{ 0, 0, 0, 0,	3, 3, 3, 3 },		// 03: ポケモン４

	{  44, 128, 0, 0,	0, 0, 2, 5 },			// 04: もどる
	{ 212, 128, 0, 0,	0, 0, 4, 0 },			// 05: ちゅうし

	{  64, 128, 0, 0,	6, 6, 6, 7 },			// 06: メニュー１
	{ 192, 128, 0, 0,	7, 7, 6, 7 },			// 07: メニュー２
};
// コールバック：ポケモン選択（交換）
static const CURSORMOVE_CALLBACK TradeGetPokeSelCallBack = {
	DummyCallBack,
	DummyCallBack,
	TradeGetMoveCallBack,
	TradeGetMoveCallBack,
};
// タッチ座標テーブル：ポケモン選択（交換）
static const RECT_HIT_TBL TradeGetPokeSelMultiHitTbl[] =
{
	{ BALL_MULTI_ADD_UPY, BALL_MULTI_ADD_DPY, BALL_MULTI_ADD_LPX(0), BALL_MULTI_ADD_RPX(0) },	// 00: ポケモン１
	{ BALL_MULTI_ADD_UPY, BALL_MULTI_ADD_DPY, BALL_MULTI_ADD_LPX(1), BALL_MULTI_ADD_RPX(1) },	// 01: ポケモン２
	{ BALL_MULTI_ADD_UPY, BALL_MULTI_ADD_DPY, BALL_MULTI_ADD_LPX(2), BALL_MULTI_ADD_RPX(2) },	// 02: ポケモン３
	{ BALL_MULTI_ADD_UPY, BALL_MULTI_ADD_DPY, BALL_MULTI_ADD_LPX(3), BALL_MULTI_ADD_RPX(3) },	// 03: ポケモン４

	{ 120-4, 135+4,  16-4,  71+4 },		// 04: もどる
	{ 120-4, 135+4, 184-4, 239+4 },		// 05: ちゅうし

	{ 120-4, 135+4,  16-4, 111+4 },		// 06: メニュー１
	{ 120-4, 135+5, 144-4, 239+4 },		// 07: メニュー２

	{ RECT_HIT_END, 0, 0, 0 }
};
// 移動テーブル：ポケモン選択（交換）
static const POINTER_WORK TradeGetPokeSelMultiMoveTbl[] =
{
	{ BALL_MULTI_ADD_PX(0), T_BALL_START_Y, 0, 0,	4, 4, 5, 1 },		// 00: ポケモン１
	{ BALL_MULTI_ADD_PX(1), T_BALL_START_Y, 0, 0,	4, 4, 0, 2 },		// 01: ポケモン２
	{ BALL_MULTI_ADD_PX(2), T_BALL_START_Y, 0, 0,	4, 4, 1, 3 },		// 02: ポケモン３
	{ BALL_MULTI_ADD_PX(3), T_BALL_START_Y, 0, 0,	4, 4, 2, 4 },		// 03: ポケモン４

	{  44, 128, 0, 0,	0, 0, 3, 5 },			// 04: もどる
	{ 212, 128, 0, 0,	0, 0, 4, 0 },			// 05: ちゅうし

	{  64, 128, 0, 0,	6, 6, 6, 7 },			// 06: メニュー１
	{ 192, 128, 0, 0,	7, 7, 6, 7 },			// 07: メニュー２
};


//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ワーク削除
 *
 * @param	wk		カーソル移動ワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void FACTORYUI_CursorMoveExit( CURSOR_MOVE_WORK * wk )
{
	CURSORMOVE_Exit( wk );
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	指定位置のカーソル座標取得
 *
 * @param	mvwk	カーソル移動ワーク
 * @param	pos		カーソル位置
 * @param	x		Ｘ座標
 * @param	y		Ｙ座標
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void FACTORYUI_CursorPosGet( CURSOR_MOVE_WORK * mvwk, int pos, int * x, int * y )
{
	const POINTER_WORK * pwk = CURSORMOVE_PointerWorkGet( mvwk, pos );

	*x = pwk->px;
	*y = pwk->py;
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ダミーコールバック関数
 *
 * @param	work
 * @param	now_pos
 * @param	old_pos
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void DummyCallBack( void * work, int now_pos, int old_pos )
{
}


//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ワーク作成（ポケモン選択（通常））
 *
 * @param	wk		ファクトリーワーク
 * @param	pos		カーソル位置
 *
 * @return	カーソル移動ワーク
 */
//--------------------------------------------------------------------------------------------
CURSOR_MOVE_WORK * FACTORYUI_CursorMoveInitNormal( FACTORY_WORK * wk, u32 pos )
{
	CURSOR_MOVE_WORK * mvwk;

	mvwk = CURSORMOVE_Create(
				NormalPokeSelHitTbl,
				NormalPokeSelMoveTbl,
				&NormalPokeSelCallBack,
				wk, TRUE, pos, HEAPID_FACTORY );

	return mvwk;
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動制限設定（ポケモン選択（通常））
 *
 * @param	wk		ファクトリーワーク
 * @param	flg		TRUE = メニュー制限なし, FALSE = メニュー部分へは移動不可
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void FACTORYUI_NormalMenuMoveSet( CURSOR_MOVE_WORK * mvwk, BOOL flg )
{
	if( flg == TRUE ){
		CURSORMOVE_MoveTableInit( mvwk );
	}else{
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_NORMAL_MENU1 );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_NORMAL_MENU2 );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_NORMAL_MENU3 );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動コールバック：移動（ポケモン選択（通常））
 *
 * @param	work		ファクトリーワーク
 * @param	now_pos		現在の位置
 * @param	old_pos		前回の位置
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void NormalMoveCallBack( void * work, int now_pos, int old_pos )
{
	if( now_pos >= FACTORYUI_NORMAL_MENU1 ){
		FACTORY_MenuCursorMove( work, now_pos );
	}else{
		FACTORY_PokeCursorMove( work, now_pos );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ワーク作成（ポケモン選択（返却））
 *
 * @param	wk		ファクトリーワーク
 * @param	pos		カーソル位置
 *
 * @return	カーソル移動ワーク
 */
//--------------------------------------------------------------------------------------------
CURSOR_MOVE_WORK * FACTORYUI_CursorMoveInitTrade( FACTORY_WORK * wk, u32 pos )
{
	CURSOR_MOVE_WORK * mvwk;

	mvwk = CURSORMOVE_Create(
				TradePokeSelHitTbl,
				TradePokeSelMoveTbl,
				&TradePokeSelCallBack,
				wk, TRUE, pos, HEAPID_FACTORY );

	return mvwk;
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ワーク作成（ポケモン選択（返却）マルチ）
 *
 * @param	wk		ファクトリーワーク
 * @param	pos		カーソル位置
 *
 * @return	カーソル移動ワーク
 */
//--------------------------------------------------------------------------------------------
CURSOR_MOVE_WORK * FACTORYUI_CursorMoveInitTradeMulti( FACTORY_WORK * wk, u32 pos )
{
	CURSOR_MOVE_WORK * mvwk;

	mvwk = CURSORMOVE_Create(
				TradePokeSelMultiHitTbl,
				TradePokeSelMultiMoveTbl,
				&TradePokeSelCallBack,
				wk, TRUE, pos, HEAPID_FACTORY );

	CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_POKE3 );

	return mvwk;
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動制限設定（ポケモン選択（返却））
 *
 * @param	wk		ファクトリーワーク
 * @param	flg		TRUE = メニュー制限なし, FALSE = メニュー部分へは移動不可
 * @param	type	バトルタイプ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void FACTORYUI_TradeMenuMoveSet( CURSOR_MOVE_WORK * mvwk, BOOL flg, u32 type )
{
	if( flg == TRUE ){
		CURSORMOVE_MoveTableInit( mvwk );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_END );
	}else{
		CURSORMOVE_MoveTableInit( mvwk );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_MENU1 );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_MENU2 );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_MENU3 );
	}
	if( FACTORY_CommCheckType(type) == TRUE ){
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_POKE3 );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動コールバック：移動（ポケモン選択（返却））
 *
 * @param	work		ファクトリーワーク
 * @param	now_pos		現在の位置
 * @param	old_pos		前回の位置
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void TradeMoveCallBack( void * work, int now_pos, int old_pos )
{
	if( now_pos >= FACTORYUI_TRADE_MENU1 ){
		FACTORY_MenuCursorMove( work, now_pos );
	}else{
		FACTORY_TradePokeCursorMove( work, now_pos );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ワーク切り替え（ポケモン選択（返却）へ）
 *
 * @param	wk		ファクトリーワーク
 * @param	cmwk	カーソル移動ワーク
 *
 * @return	カーソル移動ワーク
 */
//--------------------------------------------------------------------------------------------
CURSOR_MOVE_WORK * FACTORYUI_CursorMoveChangeTrade( FACTORY_WORK * wk, CURSOR_MOVE_WORK * cmwk )
{
	FACTORYUI_CursorMoveExit( cmwk );
	if( FACTORY_CommCheckWork(wk) == TRUE ){
		return FACTORYUI_CursorMoveInitTradeMulti( wk, 0 );
	}
	return FACTORYUI_CursorMoveInitTrade( wk, 0 );
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動ワーク切り替え（ポケモン選択（交換）へ）
 *
 * @param	wk		ファクトリーワーク
 * @param	cmwk	カーソル移動ワーク
 *
 * @return	カーソル移動ワーク
 */
//--------------------------------------------------------------------------------------------
CURSOR_MOVE_WORK * FACTORYUI_CursorMoveChangeTradeGet( FACTORY_WORK * wk, CURSOR_MOVE_WORK * cmwk )
{
	FACTORYUI_CursorMoveExit( cmwk );

	if( FACTORY_CommCheckWork(wk) == TRUE ){
		return CURSORMOVE_Create(
				TradeGetPokeSelMultiHitTbl,
				TradeGetPokeSelMultiMoveTbl,
				&TradeGetPokeSelCallBack,
				wk, TRUE, 0, HEAPID_FACTORY );
	}
	return CURSORMOVE_Create(
			TradeGetPokeSelHitTbl,
			TradeGetPokeSelMoveTbl,
			&TradeGetPokeSelCallBack,
			wk, TRUE, 0, HEAPID_FACTORY );
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動制限設定（ポケモン選択（交換））
 *
 * @param	wk		ファクトリーワーク
 * @param	flg		TRUE = メニュー制限なし, FALSE = メニュー部分へは移動不可
 * @param	type	バトルタイプ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void FACTORYUI_TradeGetMenuMoveSet( CURSOR_MOVE_WORK * mvwk, BOOL flg, u32 type )
{
	if( flg == TRUE ){
		CURSORMOVE_MoveTableInit( mvwk );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_GET_RET );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_GET_END );
	}else{
		CURSORMOVE_MoveTableInit( mvwk );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_GET_MENU1 );
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_GET_MENU2 );
	}
	if( FACTORY_CommCheckType(type) == FALSE ){
		CURSORMOVE_MoveTableBitOff( mvwk, FACTORYUI_TRADE_GET_POKE4 );
	}
}

//--------------------------------------------------------------------------------------------
/**
 * @brief	カーソル移動コールバック：移動（ポケモン選択（交換））
 *
 * @param	work		ファクトリーワーク
 * @param	now_pos		現在の位置
 * @param	old_pos		前回の位置
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void TradeGetMoveCallBack( void * work, int now_pos, int old_pos )
{
	if( now_pos >= FACTORYUI_TRADE_GET_MENU1 ){
		FACTORY_MenuCursorMove( work, now_pos );
	}else{
		FACTORY_TradeGetPokeCursorMove( work, now_pos );
	}
}